#include <stdio.h>
#include "utils.h"
#include "student.h"

/*
 * 工具函数：交换两个学生
 */
void swap(Student* a, Student* b) {
    Student temp = *a;
    *a = *b;
    *b = temp;
}

/*
 * 工具函数：快速排序（按成绩降序）
 * 使用递归方式实现，效率比冒泡排序高
 */
void quickSort(Student arr[], int left, int right) {
    if (left >= right) return;

    float pivot = arr[left].score; // 基准分数
    int i = left, j = right;

    while (i < j) {
        // 从右边找比基准小的
        while (i < j && arr[j].score <= pivot) j--;
        // 从左边找比基准大的
        while (i < j && arr[i].score >= pivot) i++;
        if (i < j) swap(&arr[i], &arr[j]);
    }
    // 基准点归位
    swap(&arr[left], &arr[i]);

    // 递归排序左右子区间
    quickSort(arr, left, i - 1);
    quickSort(arr, i + 1, right);
}

/*
 * 工具函数：根据分数区间查找学生
 * 例如 80~90 分的学生
 */
void findByScoreRange(Student arr[], int n, float low, float high) {
    int found = 0;
    for (int i = 0; i < n; i++) {
        if (arr[i].score >= low && arr[i].score <= high) {
            printf("%s\t%s\t%.2f\n", arr[i].id, arr[i].name, arr[i].score);
            found = 1;
        }
    }
    if (!found) {
        printf("没有找到在 %.2f ~ %.2f 分之间的学生！\n", low, high);
    }
}